(function($){
	
	var menu = {
		init: function(params){
			return (function(){
				menu.getData(params);
				var u = menu.createMenu(params);
				$(u).addClass("mtree");
				$(u).attr("id","ulMtreeId");
				$("#"+params.menuId).html(u);
			})();
		},
		getData: function(params){
			return (function(){
				if(params.data != null && params.data != undefined && !jQuery.isEmptyObject(params.data)){
					return ;
				}
				$.ajax({
					type: "POST",
					data: {},
					url: params.url,
					async: false,
					success: function(data){
						if(typeof(data) == "string"){
							params.data = jQuery.parseJSON(data);
						}else{
							params.data = data;
						}
					}
				});
			})();
		},
		createMenu: function(params){
			var json =  params.data;
			var _ul = document.createElement("ul");
			for(var i =0;i < json.length ;i++){
				var _li = document.createElement("li");
				var _a = document.createElement("a");
				var _img = document.createElement("img");
				
				$(_img).attr("src",json[i].icon);
				$(_img).attr("class","menu-icon");
				$(_a).attr("a-href",json[i].url);
				$(_a).append(_img);
				$(_a).append(json[i].text);
				$(_li).append(_a);//
				$(_li).addClass("top_item");
				$(_li).attr("id",json[i].id);
				if("children" in json[i] && !jQuery.isEmptyObject(json[i].children)){
					params.data = json[i].children; 
					var u = menu.createMenu(params);
					$(u).attr("style","margin-left:-25px;display:none");
					$(_li).append(u);
					$(_li).addClass("has-children-close");
					$(_li).on("click",function(event){
							event.stopPropagation();
							menu.itemClick(this,params);
					});
				}else{
					$(_li).on("click",function(event){
						event.stopPropagation();
						menu.openItemUrl(this,params);
					});
				}
				$(_li).find("a:first").eq(0).on("mouseover",function(event){
					$(this).addClass("menu-item-over");
				});
				$(_li).find("a:first").eq(0).on("mouseout",function(event){
					$(this).removeClass("menu-item-over");
				});
				$(_ul).append(_li);
			}
			return _ul;
		},
		openItemUrl:function(obj,params){
			menu.updateClickItemBackColor(obj);
			
			if(typeof(params.backFunction)  == "function" ){
				params.backFunction(obj);
				return;
			}
			$("#"+params.pageId).load($(obj).find("a").eq(0).attr("a-href"));
		},
		updateClickItemBackColor:function(obj){
			//修改菜单颜色
			$("#ulMtreeId").find("li").each(function(){
				$(this).find("a:first").eq(0).removeClass("menu-item-click menu-item-over");
			});
			
			if($(obj).is(".has-children-open")){
				//修改选中颜色
				$(obj).find("a:first").eq(0).addClass("menu-item-click");
			}
			if(!$(obj).is(".has-children-open") && !$(obj).is(".has-children-close")){
				//修改选中颜色
				$(obj).find("a:first").eq(0).addClass("menu-item-click");
			}
		},
		itemClick: function(obj,params){
			var _ul = $(obj).find("ul");
			
			//关闭其他菜单项
			$(obj).parent().find("li").each(function(index){
				if($(obj).attr("id") != $(this).attr("id")){
					var _li_ul = $(this).find("ul:first");
					_li_ul.eq(0).css("display","none");
					if(_li_ul.length > 0){
						$(this).addClass("has-children-close");
						$(this).removeClass("has-children-open");
					}
				}
			});
			
			//打开当前菜单
			if(_ul.length > 0){
				if(_ul.eq(0).css("display") == "none"){
					$(obj).removeClass("has-children-close");
					$(obj).addClass("has-children-open");
					_ul.eq(0).slideDown(400);
				}else{
					$(obj).addClass("has-children-close");
					$(obj).removeClass("has-children-open");
					_ul.eq(0).slideUp(400);
				}
			}
			
			menu.updateClickItemBackColor(obj);
		}
	}
	
	$.fn.extend({
		initMenu: function(options){
			var params = $.extend({
				menuId: "",
				url: "",
				data: {},
				backFunction: {},
				pageId: ""
			},options);
			menu.init(params);
		}
	});
	
})(jQuery);
